#include <iostream>
#include <functional>

// 定义一个函数，它接受一个std::function类型的参数
void callFunction(std::function<int(int)> f, int num)
{
    int result = f(num); // 调用传入的可调用对象，并传递参数5
    std::cout << "Result: " << result << std::endl;
}

// 普通函数
int add_five(int x)
{
    return x+5;
}

int main()
{
    std::function<int(int)> f_add_five = add_five;
    // 调用callFunction函数
    callFunction(add_five,2);       // 函数对象 --OK
    callFunction(f_add_five,3);     // 函数变量 --OK

    // 使用std::function直接定义一个 lambda可调用对象
    std::function<int(int)> multiplyByTwo = [](int x)
    { return x * 2; };

    // 直接调用std::function对象
    std::cout << "Multiplying by two: " << multiplyByTwo(3) << std::endl;

    return 0;
}